#include <iostream>
#include <string>

using namespace std;

// FIXME: 不建议把`n`作为模版变量传入，可以作为类的构造函数的参数传入，比较好
template<typename T, int n>
class arrays{
public:
    int len;
    T *arr;

public:
    arrays(){
        len=n;
        arr=new T[len];
    }
    
    ~arrays(){
        delete []arr;
    }
/*一定要记得清空栈区数组，不然会爆出
terminate called after throwing an instance of 'std::bad_alloc的错误
*/

    void set_element(int i, T a) {
        arr[i]=a;
    }
    
    // FIXME: 函数名字直接用动词的一般时就好。`search`更好一些
    int searched(T b){
        len=n;
        for(int i=0;i<len;i++){
            if(arr[i]==b){
                return i;
            }
        }
    }
};

int main(){
    char test[]="abcdefg";
    arrays<char,7> chararr;
    for(int i=0;i<7;i++){
        chararr.set_element(i,test[i]);
    }
    
    int index=chararr.searched('e');
    if(index>=0){cout<<index<<endl;}

    return 0;
}
